home *** CD-ROM | disk | FTP | other *** search
/ 500 MB Nyheder Direkte fra Internet 2 / 500 MB nyheder direkte fra internet CD 2.iso / start / data / text / faq-0455.txt < prev    next >
Text File  |  1995-05-04  |  58KB  |  1,355 lines

  1. Archive-name: eiffel-faq
  2. Last-modified: 27 Apr 1995
  3.  
  4. EIFFEL: FREQUENTLY ASKED QUESTIONS
  5. ----------------------------------
  6.  
  7. This question-and-answer list is posted monthly to the Usenet newsgroups 
  8. comp.lang.eiffel, comp.answers and news.answers.
  9.  
  10. Please send corrections, additions and comments to Roger Browne 
  11. (rogerb@eiffel.demon.co.uk).
  12.  
  13. This information is abstracted and condensed from the posts of many 
  14. contributors to comp.lang.eiffel, supplemented by information from vendors. 
  15. No guarantees are made regarding its accuracy.
  16.  
  17. This compilation is by Roger Browne. Distribution over the Internet or by 
  18. electronic mail is unrestricted. Other use requires my permission.
  19.  
  20. You can receive the latest copy by anonymous file transfer from:
  21.  
  22.    ftp://ftp.cm.cf.ac.uk/pub/eiffel/eiffel-faq
  23.    ftp://rtfm.mit.edu/pub/usenet/news.answers/eiffel.faq
  24.  
  25. or by sending an email message to archive-server@cm.cf.ac.uk with the 
  26. following message body:
  27.  
  28.    send Eiffel eiffel-faq
  29.  
  30. ----------
  31.  
  32. CONTENTS
  33.  
  34. Changes since the last posting:
  35.  
  36.    Q07: Added details of new book "OOP in Eiffel" (Rist/Terwilliger)
  37.    L13: Are there any destructors in Eiffel? What about object finalization?
  38.         (new question)
  39.  
  40.    Thanks for help with this month's updates to:
  41.    Bertrand Meyer, Rock Howard
  42.  
  43. As the previous posting of this FAQ apparently did not propagate to many 
  44. parts of the world, here is a list of the changes in that posting:
  45.  
  46.    Q04: More details of discounted Eiffel products
  47.    Q07: Added details of new book "OOP in Eiffel" (Thomas/Weedon)
  48.    Q08: Added details of the Eiffel patterns mailing list
  49.    Q16: New contact details for Feinarbeit
  50.    Q17: Eiffel activities at OOPSLA and Object Expo conferences
  51.    Also, Tower's product details were updated in many places
  52.  
  53. Frequently Asked Questions:
  54.  
  55.    Q01) What is Eiffel?
  56.    Q02) Where did Eiffel come from?
  57.    Q03) What Eiffel products are available?
  58.    Q04) Are there any school or student discounts?
  59.    Q05) Is Eiffel available in the public domain or as shareware?
  60.    Q06) What is Sather? How does it compare to Eiffel?
  61.    Q07) What books are available for learning about Eiffel?
  62.    Q08) Are any magazines or newsletters available concerning Eiffel?
  63.    Q09) Is Eiffel available on PC, Mac, NeXT, Amiga, Atari, ...?
  64.    Q10) Is there an archive of the comp.lang.eiffel newsgroup?
  65.    Q11) How much memory and disk space does Eiffel development require?
  66.    Q12) How large are typical Eiffel executables?
  67.    Q13) Are there standards for the Eiffel language?
  68.    Q14) How fast do Eiffel applications run?
  69.    Q15) Are there any Eiffel user groups?
  70.    Q16) Where can I get Eiffel products and services?
  71.    Q17) Are there any conferences for Eiffel users?
  72.    Q18) Why do Eiffel implementations compile to C?
  73.    Q19) What is BON?
  74.    Q20) Where can I get an Eiffel editor or emacs-mode?
  75.    Q21) Where can I find Eiffel on the World-Wide-Web?
  76.  
  77. Language Issues:
  78.  
  79.    L01) What features does Eiffel have?
  80.    L02) What changes have been made to the Eiffel language definition?
  81.    L03) What libraries come with Eiffel?
  82.    L04) What's the big deal about preconditions and postconditions?
  83.    L05) Please explain and discuss covariance vs. contravariance.
  84.    L06) Is it true that there are "holes" in the Eiffel type system?
  85.    L07) Is there support for concurrency in Eiffel?
  86.    L08) Why doesn't Eiffel allow function overloading?
  87.    L09) Why are there no procedural types in Eiffel?
  88.    L10) Why are there no class attributes in Eiffel?
  89.    L11) How can I call the parent-class version of a redefined routine?
  90.    L12) Where can I find a comparison between Eiffel and C++?
  91.  
  92. ----------
  93.  
  94. Q01)   What is Eiffel?
  95.  
  96. Eiffel is an advanced object-oriented programming language that emphasizes 
  97. the design and construction of high-quality and reusable software.
  98.  
  99. Eiffel is not a superset or extension of any other language. Eiffel 
  100. strongly encourages object-oriented programming and does not allow 
  101. dangerous practices from previous generation languages although it does 
  102. interface to other languages such as C and C++. Eiffel supports the concept 
  103. of "Design by Contract" to improve software correctness.
  104.  
  105. Beyond the language aspect Eiffel may be viewed as a method of software 
  106. construction. Eiffel is an excellent vehicle for software education, 
  107. including for a first programming course.
  108.  
  109. ----------
  110.  
  111. Q02)   Where did Eiffel come from?
  112.  
  113. Eiffel was created by Bertrand Meyer and developed by his company, 
  114. Interactive Software Engineering (ISE) of Goleta, CA.
  115.  
  116. Dr. Meyer borrowed on his extensive experience with OOP, particularly with 
  117. Simula. He also added in important concepts from his academic work on 
  118. software verification and computer language definition.
  119.  
  120. Eiffel's design addresses many practical concerns that software engineers 
  121. face when creating complex software. Eiffel has evolved continually since 
  122. its conception on September 14, 1985 and its first introduction in 1986.
  123.  
  124. Eiffel is named after Gustave Eiffel, the engineer who designed the Eiffel 
  125. Tower.
  126.  
  127. ----------
  128.  
  129. Q03)   What Eiffel products are available?
  130.  
  131. ISE Eiffel 3 is a commercially supported product from Interactive Software 
  132. Engineering.
  133.  
  134. ISE Eiffel 3 is a complete graphical development environment meant for the 
  135. production of quality software, with particular attention being given to 
  136. the development of large systems. The environment itself is written in 
  137. Eiffel, and is an example of non-trivial system - about 3000 classes.
  138.  
  139. Eiffel/S is produced by SIG Computer GmbH of Germany, based on the Eiffel 3 
  140. language definition. Eiffel/S release 1.3 includes a command-line compiler 
  141. with automatic configuration management, libraries and manual.
  142.  
  143. TowerEiffel is an open high-performance Eiffel development system from 
  144. Tower Technology Corporation of Austin, Texas. TowerEiffel includes:
  145.    - a fast Eiffel 3 compiler that generates executables that can rival
  146.      applications built with C and C++ in terms of performance;
  147.    - both graphical and emacs-based multi-language source level debuggers;
  148.    - support for C, C++ and Objective C as external languages. Also can
  149.      generate code for each of these languages.
  150.    - an emacs-based development environment including syntax-directed
  151.      color highlighting, browsing, and automatic documentation
  152.      generation in ASCII, LaTex, RTF, HTML or FrameMaker mif format;
  153.    - kernel and support libraries including simple persistence and
  154.      heterogenous object distribution.
  155.  
  156. ----------
  157.  
  158. Q04)   Are there any school or student discounts?
  159.  
  160. Both ISE Eiffel and SIG Eiffel/S include aggressive site-licensing and 
  161. discount licenses for schools and universities.
  162.  
  163. Eiffel/S offers an inexpensive student or trial license. This license is 
  164. limited to building systems with up to 75 classes. You do not have to be a 
  165. student to buy it, and you get a discount if you subsequently upgrade to 
  166. the full version. Eiffel/S offers very cheap high school site licences, and 
  167. there is also a heavily-discounted version available by means of the coupon 
  168. in the book "OO Programming in Eiffel".
  169.  
  170. Tower offers TowerEiffel and other add-on libraries and tools to 
  171. Universities and Colleges in the form of custom licenses that are specially 
  172. arranged to fit the requirements and budgets of those choosing to use 
  173. Eiffel for educational purposes.
  174.  
  175. Free evaluation licenses are available for professors or departments who 
  176. are seriously considering TowerEiffel for classroom or other educational 
  177. use.
  178.  
  179. ISE offers a much-reduced price on its Linux product for individuals.
  180.  
  181. ----------
  182.  
  183. Q05)   Is Eiffel available in the public domain or as shareware?
  184.  
  185. There is not currently a public domain Eiffel compiler. ISE has expressed 
  186. willingness to support the serious efforts of those who wish to create a PD 
  187. Eiffel, but so far no such effort has succeeded.
  188.  
  189. There is, however, a somewhat limited Eiffel 2.3 interpreter for the Atari 
  190. ST which is shareware (DM50). The documentation is in German, and the 
  191. example files seem quite interesting. Inheritance does not seem to be 
  192. supported (!), but there is an interesting extension to allow "for all" and 
  193. "for some" in assertions.
  194.  
  195. The EON Eiffel compiler is shareware under MS-DOS and Linux, and a beta-
  196. test version is available from ftp://ftp.demon.co.uk/pub/eiffel/eon-eiffel/
  197.  
  198. The following Eiffel archive sites allow anonymous file transfer:
  199.  
  200. ftp://ftp.tu-clausthal.de/pub/atari/languages/eiffel/vici_102.lzh
  201.    The Atari ST interpreter referred to above.
  202.  
  203. ftp://ftp.cm.cf.ac.uk/pub/eiffel
  204.    University of Wales. Contains the latest version of this FAQ, plus the 
  205.    front-end parser (ep) and various public domain classes. To contribute, 
  206.    contact Ted Lawson (ted@cm.cf.ac.uk).
  207.  
  208. ftp://ftp.fu-berlin.de/pub/unix/languages/heron
  209.    This is an Eiffel front-end parser (HERON) in the public domain, 
  210.    created by Burghardt Groeber and Olaf Langmack of the Freie Universitat 
  211.    in Berlin.
  212.  
  213. ftp://ftp.informatik.uni-stuttgart.de/pub/eiffel
  214.    Falkultaet Informatik der Universitaet Stuttgart, Germany. Contains a 
  215.    compiler generator, several encapsulations, a pretty-printer for 
  216.    Eiffel/S, and some utility classes. To contribute, contact Joerg Schulz 
  217.    (schulz@adam.informatik.uni-stuttgart.de).
  218.  
  219. ftp://utarlg.uta.edu/CSE/EIFFEL
  220.    UT-Arlington, USA. Contains some code from Eiffel Outlook back issues.
  221.  
  222. ftp://wuarchive.wustl.edu/graphics/gif/e/eiffel_tower
  223.    Contains a GIF graphic of the eiffel tower
  224.    (also on plaza.aarnet.edu.au from Australia only).
  225.  
  226. ----------
  227.  
  228. Q06)   What is Sather? How does it compare to Eiffel?
  229.  
  230. Sather is an object-oriented language, originally patterned after Eiffel, 
  231. created by Stephen Omohundro and others at ICSI of Berkeley, CA.
  232.  
  233. Sather simplifies some Eiffel constructs, eliminates others, and adds some 
  234. constructs of its own such as iteration abstraction, built-in arrays, 
  235. overloading and object constants. Sather does not support Design by 
  236. Contract.
  237.  
  238. See the usenet newsgroup comp.lang.sather for more details.
  239.  
  240. ----------
  241.  
  242. Q07)   What books are available for learning about Eiffel?
  243.  
  244. The classic text for learning about Eiffel (and OO programming in general) 
  245. is Dr. Meyer's "Object Oriented Software Construction". Although the 
  246. language has evolved significantly since the book was published, the 
  247. presentation of the basic problems and solutions which motivate the object-
  248. oriented mind set are still quite compelling. This is the book to get if 
  249. you are new to the object-oriented world (Prentice Hall, ISBN 13-629031-0). 
  250. A new edition is expected during 1995. Available in French as "Conception 
  251. et Programmation par Objets" (90/10 InterEditions, ISBN 2-7296-0272-0) and 
  252. in German as "Objektorientiert Softwareentwicklung (Hanser, ISBN 3-446-
  253. 15773-5).
  254.  
  255. Also by Dr. Meyer, "Eiffel: The Language", combines an introduction to 
  256. Eiffel, the language reference, and a good deal of philosophy into its 600 
  257. pages. This is a rigorous and comprehensive book which some readers may 
  258. find heavy going despite Dr. Meyer's clarity of expression. It is the 
  259. definitive language reference, and essential reading for all serious Eiffel 
  260. users. Get the second or later printing (same ISBN), which includes many 
  261. corrections and changes (there is not a second edition, and none is 
  262. currently underway) (Prentice Hall, ISBN 13-247925-7). Available in French 
  263. as "Eiffel, le langage" (94/10 InterEditions, ISBN 2-7296-0525-8).
  264.  
  265. Dr. Meyer and Jean-Marc Nerson have edited "Object-Oriented Applications". 
  266. It includes an introduction to Eiffel technology followed by seven in-depth 
  267. descriptions of large applications written in Eiffel. (Prentice Hall, ISBN 
  268. 13-013798-7)
  269.  
  270. Robert Switzer has written "Eiffel: An Introduction". This is a very clear 
  271. and concise Eiffel primer, with many code fragments and two substantial 
  272. Eiffel applications. (Prentice Hall, ISBN 13-105909-2). Available in French 
  273. as "Introduction a Eiffel" (Masson, ISBN 2-225-84-656-1)
  274.  
  275. ISE distributes a set of 6 video lectures entitled "Object-Oriented 
  276. Software Construction", taught by Bertrand Meyer. These provide an overall 
  277. introduction to the method and use ISE Eiffel 3 to illustrate the concepts.
  278.  
  279. Frieder Monninger's book "Eiffel: Objektorientiertes Programmieren in der 
  280. Praxis" is a very down-to-earth Eiffel handbook in German. (Heise, ISBN 3-
  281. 88229-028-5).
  282.  
  283. Bertrand Meyer's "Reusable Software: The Base Object-Oriented Component 
  284. Libraries" (Prentice Hall, ISBN 0-13-245499-8, about 530 pages) describes 
  285. principles of library design and the taxonomy of fundamental computing 
  286. structures. Serves as a manual for the EiffelBase libraries.
  287.  
  288. Bertrand Meyer's "An Object-Oriented Environment: Principles and 
  289. Application" (Prentice Hall, ISBN 0-13-245507-2, 240 pages) describes the 
  290. principles that led to the ISE EiffelBench environment as well as the 
  291. "Melting Ice" compilation technology. Also describes the EiffelBuild GUI 
  292. application builder.
  293.  
  294. Richard Wiener's "Software Development Using Eiffel: There can be life 
  295. other than C++" (Prentice-Hall, ISBN 0-13-100686-X) is a useful book (full 
  296. of serious code samples) for those with a grounding in another OO language.
  297.  
  298. A book by Kim Walden and Jean-Marc Nerson, "Seamless Object-Oriented 
  299. Software Architecture: Analysis and Design of Reliable Systems", describes 
  300. the BON method in detail (Prentice Hall, ISBN 0-13-031303-3).
  301.  
  302. Pete Thomas and Ray Weedon's "OO Programming in Eiffel" is a very 
  303. comprehensive Eiffel tutorial and textbook, with a solid "Abstract Data 
  304. Type" approach. Includes a coupon for a discounted compiler (Addison-
  305. Wesley, ISBN 0-201-59387-4).
  306.  
  307. Another book called "OO Programming in Eiffel" is by Robert Rist and
  308. Robert Terwilliger, and is a textbook with an emphasis on design.
  309. (Prentice-Hall, ISBN 0-13-205931-2).
  310.  
  311. ----------
  312.  
  313. Q08)   Are any magazines or newsletters available concerning Eiffel?
  314.  
  315. Eiffel Outlook is a bi-monthly journal devoted to Eiffel. Now in its fourth 
  316. year of publication, Eiffel Outlook is 24 to 28 pages long. Topics cover 
  317. all areas of interest to the Eiffel community.
  318.  
  319. Subscriptions, trial subscriptions and back issues are available.
  320.  
  321. Eiffel Outlook is distributed by:
  322.  
  323.    SIG Computer in Germany
  324.    Everything Eiffel in the UK and France
  325.    Simon Parker in Ireland
  326.    IMSL in Japan
  327.    Enea Data in Sweden
  328.    Tower Technology in the USA and for all other countries
  329.  
  330. Details are available on the Web at 
  331. <http://www.cm.cf.ac.uk/Tower/Outlook.html> or by sending email to 
  332. <outlook@twr.com>.
  333.  
  334. ISE produces a newsletter "Eiffel World". Subscriptions are free (email 
  335. your request to info@eiffel.com). Individual copies are available from:
  336.  
  337.    Cybertech in Argentina
  338.    Class Technology in Australia
  339.    Jay-Kell Technologies in Canada
  340.    SOL in France
  341.    SIG Computer in Germany
  342.    Eiffel Ireland in Ireland
  343.    Etnoteam in Italy
  344.    Information & Math Science Lab or Software Research Associates in Japan
  345.    Chromasoft in Mexico
  346.    Science O-O Products & Systems in the Netherlands
  347.    Objective Methods in New Zealand
  348.    Ruperez & Associates in Spain
  349.    Enea Data in Sweden
  350.    Abstraction in Switzerland
  351.    Everything Eiffel in the UK
  352.  
  353. If you're interested in Software Design Patterns you may like to subscribe 
  354. to the Eiffel Patterns mailing list. Send email to:
  355.  
  356.    e-patterns-request@cbr.dit.csiro.au
  357.  
  358. ----------
  359.  
  360. Q09)   Is Eiffel available on PC, Mac, NeXT, Amiga, Atari, ...?
  361.  
  362. This is the latest information that I have, but it does change rapidly.
  363.  
  364. SIG Eiffel/S 1.3 is available for DOS on the PC. As at January 1994, the 
  365. following C compilers are supported: Microsoft C 7.0, Borland C++ 3.x, Gnu 
  366. 2.2.2 (with DJ Expander), Gnu 2.4.5 (with emx-g expander), Symantec C++ 
  367. 6.0, Watcom 9.5. SIG uses Symantec in-house. It works best with a 32-bit 
  368. compiler, e.g. Gnu, Symantec, Watcom.
  369.  
  370. Eiffel/S 1.3 is also available for OS/2 (using GCC 2.4.5 emx-g, Watcom C 
  371. 9.5 or IBM C/Set) and Windows/NT (Microsoft 32-bit C, Watcom C 9.5 or 
  372. Symantec C++ 6.0), and for the following Unix systems: Linux, PC Unix 
  373. (Interactive, SCO, and ESIX), SPARC, NeXT, NeXTstep-Intel, HP/9000, DEC 
  374. 5xxx, Sony News, DG Aviion, DEC Alpha (OSF-1), and RS/6000.
  375.  
  376. Eiffel/S can be used to produce MS-Windows programs when used with the EPWL 
  377. library (and Watcom C++ 10 or Microsoft Visual C++ 32-bit edition as the 
  378. back-end). Eiffel/S will also support the ICE library for graphics 
  379. applications under MS-Windows or Unix.
  380.  
  381. ISE's Eiffel 3 (Release 3.2) is available for DEC Alpha (OSF-1), DEC MIPS 
  382. (Ultrix), DG Aviion (and hence other 88Open platforms), Fujitsu, HP UX, IBM 
  383. RS/6000, Linux (with Motif only), NeXTSTEP (Intel and Motorola), Pyramid, 
  384. SCO (Open Desktop), Silicon Graphics, AIX/PS2 and Sparc (Solaris 2.3 or 
  385. SunOS). The VMS and version is nearing completion. Development is underway 
  386. for other platforms.
  387.  
  388. ISE Personal Eiffel is a low-cost menu/keyboard-driven implementation of 
  389. Eiffel 3 which runs under Microsoft Windows 3.1. It does not require a C-
  390. compiler back-end, and combines interpreted user code with precompiled 
  391. libraries. It includes the EiffelBase, EiffelLex and EiffelParse libraries 
  392. in source code form. You cannot use it to develop GUI software or call 
  393. external C routines. ISE is developing further Windows products.
  394.  
  395. Tower Technology Corporation's TowerEiffel 1.4 is available for:
  396.  
  397. - SUN Sparc or compatible running SunOS 4.1.x,
  398. - SUN Sparc or compatible running Solaris 2.x,
  399. - HP 9000/700 running HPUX 9.05,
  400. - NeXTStep x86,
  401. - NeXTStep m68k,
  402. - Linux x86 (kernel 0.9 and 1.1), and
  403. - OS/2 x86 2.1 or Warp.
  404.  
  405. A beta release of TowerEiffel is also immenient for Win/NT.
  406.  
  407. ----------
  408.  
  409. Q10)   Is there an archive of the comp.lang.eiffel newsgroup?
  410.  
  411. Yes, at the following FTP sites:
  412.  
  413. ftp://wuarchive.wustl.edu/usenet/comp.lang.eiffel/
  414. ftp://gatekeeper.dec.com/pub/plan/eiffel/usenet/ (to September 1992 only)
  415.  
  416. and on the WWW at http://www.cm.cf.ac.uk/CLE/
  417.  
  418. ----------
  419.  
  420. Q11)   How much memory and disk space does Eiffel development require?
  421.  
  422. To install and run Eiffel/S 1.3 or Eon Eiffel under DOS, you need about 
  423. 10MB of disk space and at least 4MB RAM (8MB recommended). Other products 
  424. and platforms require more.
  425.  
  426. However, for serious Eiffel work you could easily use 100MB or more disk 
  427. space and 32MB RAM.
  428.  
  429. ----------
  430.  
  431. Q12)   How large are typical Eiffel executables?
  432.  
  433. (How large are typical C executables?)
  434.  
  435. Seriously, Eiffel does impose a minimum size which is large since even 
  436. trivial Eiffel applications bring in a lot of classes. So, a simple program 
  437. like "Hello World" will create a relatively large executable.
  438.  
  439. Interestingly, Eiffel applications seem to grow less rapidly as new 
  440. capabilities are added. Reuse does help out tremendously in this regard. A 
  441. good Eiffel compiler allows large applications to be smaller than equally 
  442. functional applications written in C.
  443.  
  444. Note that leaving assertion checking in the code increases the size of 
  445. applications a lot. Despite this, many of us prefer that they remain 
  446. throughout development. Some even deliver a PRECONDITIONS-only version of 
  447. their applications to their early customers.
  448.  
  449. ----------
  450.  
  451. Q13)   Are there standards for the Eiffel language?
  452.  
  453. The definition of the Eiffel language is in the public domain. This 
  454. definition is controlled by NICE, the Non-profit International Consortium 
  455. for Eiffel. This means that anyone or any company may create a compiler, 
  456. interpreter, or whatever having to do with Eiffel. NICE reserves the right 
  457. to validate that any such tool conforms to the current definition of the 
  458. Eiffel language before it can be distributed with the Eiffel trademark. 
  459. (i.e. advertised as an "Eiffel" compiler.)
  460.  
  461. The Eiffel trademark is owned and controlled by NICE. NICE is using 
  462. Bertrand Meyer's book, "Eiffel: The Language" (2nd Printing), as the 
  463. initial definition of the language.
  464.  
  465. The NICE board of directors for 1995 consists of Christine Mingins (chair), 
  466. Bertrand Meyer (treasurer), Simon Parker (secretary) and Paul Johnson.
  467.  
  468. NICE has formed the Eiffel Standards Group (ESG) to resolve standards 
  469. questions and control the evolution of the language. The three current 
  470. Eiffel Compiler Vendors (ISE, SIG and Tower) are represented in the ESG as 
  471. well as many important and influential users of Eiffel.
  472.  
  473. There are three committees -- Language, Library, and Future Directions.
  474.  
  475. The Language Committee will address the ambiguities in the Eiffel Version 3 
  476. language specification as well as the differences that appear between the 
  477. current Eiffel 3 implementations.
  478.  
  479. The Library Committee will standardize the Kernel library.
  480.  
  481. The Future Requirements Committee will prioritize the long range direction 
  482. of the standards work performed by the other two committees.
  483.  
  484. NICE (Nonprofit International Consortium for Eiffel)
  485. 45 Hazelwood
  486. Shankill
  487. Co Dublin
  488. Republic of Ireland
  489. TEL: +353 1 282 3487
  490. email: nice@atlanta.twr.com
  491.  
  492. ----------
  493.  
  494. Q14)   How fast do Eiffel applications run?
  495.  
  496. Early versions of Eiffel were slow. Recent implementations have improved 
  497. dramatically. However, to achieve maximum performance under any Eiffel 
  498. implementation, run-time assertion monitoring must be switched off.
  499.  
  500. It's hard to generalise, but compared to C++, simple computation-intensive 
  501. applications will run perhaps 15% slower. Large applications are often 
  502. dominated by memory management rather than computation. ISE recently 
  503. demonstrated that by simply adding a call to the garbage collector's "full-
  504. collect" routine at a time when there were known to be few live objects, 
  505. performance became dramatically faster than a corresponding C++ version.
  506.  
  507. ----------
  508.  
  509. Q15)   Are there any Eiffel user groups?
  510.  
  511. International Eiffel User Group      UK & Ireland Eiffel Interest Group
  512. Darcy Harrison - Attention: IEUG     (new address to be notified)
  513. ISE Inc.                             (Holds meetings and seminars)
  514. 270 Storke Road, Suite 7
  515. Goleta, CA 93117, USA
  516. TEL (805) 685-1006
  517. FAX (805) 685-6869
  518. darcyh@eiffel.com
  519.  
  520. GUE, Groupe des Utilisateurs Eiffel (France)
  521. Jean-Marc Nerson
  522. 104 rue Castagnary, 75015 Paris
  523. TEL +33 1 45 32 58 80
  524. FAX +33 1 44 32 58 81
  525. marc@eiffel.fr
  526. (meets every two months or so)
  527.  
  528. TowerEiffel User's Group
  529. Private cyberspace mailing list for supported Tower customers with meetings 
  530. coinciding with major OO Conferences and Events.
  531.  
  532. ----------
  533.  
  534. Q16)   Where can I get Eiffel products and services?
  535.  
  536. Interactive Software Engineering, Inc.  Jay-Kell Technologies, Inc.
  537. 270 Storke Road, Suite 7                48 Lakeshore Road, Suite #1
  538. Goleta, CA 93117                        Pointe Claire, Quebec
  539. TEL 805-685-1006                        Canada H9S 4H4
  540. FAX 805-685-6869                        TEL +51 4 630 1005
  541. email info@eiffel.com                   FAX +51 4 630 1456
  542.  
  543. SIG Computer GmbH                       Tower Technology Corporation
  544. zu den Bettern 4                        1501 Koenig Lane
  545. D 35619 Braunfels, Germany              Austin, TX 78756 USA
  546. TEL +49 6472 2096, FAX +49 6472 7213    TEL 512-452-9455
  547. email eiffel@sigcomp.de                 FAX 512-452-1721
  548. (cyrillic email eiffel@sigcomp.msk.su)  email: tower@twr.com
  549.  
  550. Class Technology Pty. Ltd.              Cybertech
  551. 6 Pound Road                            Systens Integration for CIM
  552. Hornsby NSW 2077, Australia             Suarez 1281, Third Floor,Apt.A
  553. TEL +61 2 477 6188                      CP-1288 Buenos Aires, Argentina
  554. FAX +61 2 476 4378                      TEL +54 1 28 1950
  555. email class@peg.pegasus.oz.au           FAX +54 1 322 1071 or 963 0070
  556.  
  557. Everything Eiffel                       Eiffel Ireland
  558. 6 Bambers Walk                          45 Hazelwood
  559. Wesham PR4 3DG                          Shankill
  560. England                                 Co Dublin, Ireland
  561. TEL & FAX +44 1772 687525               TEL +353 1 282 3487
  562. email rogerb@eiffel.demon.co.uk         email sparker@eiffel.ie
  563.  
  564. EtnoTeam                                SOL
  565. Via Adelaide Bono Cairoli 34            104 rue Castagnary
  566. 20217 Milano , Italy                    75015 Paris, France
  567. TEL +39 2 261621                        TEL +33 1 45 32 58 80
  568. FAX +39 2 26110755                      FAX +33 1 45 32 58 81
  569. email sales@etnomi.it                   email eiffel@eiffel.fr
  570.  
  571. Enea Data                               Sritech Information Technology
  572. Box 232, Nytorpsvagen 5                 744/51 2nd Floor
  573. S-183 23 Taby, Sweden                   10 Mian Road, 4th Block
  574. TEL +46 8 792 25 00                     Jayanagar, Bangalore, India 560011
  575. FAX +46 8 768 43 88                     TEL +91 812 640661
  576. email eiffel@enea.se                    FAX +91 812 643608
  577.  
  578. Cromasoft SA de CV                      Objective Methods Ltd
  579. Mazatlan 161                            PO Box 17356 (77 Chamberlain Rd)
  580. Col Condesa, 06140 Mexico               Karori, Wellington, New Zealand
  581. TEL +52 5 286 82 13                     TEL +64 4 476 9499
  582. FAX +52 5 286 80 57                     FAX +64 4 476 9237 or 8772
  583. email claudio@croma.sunmexico.sun.com   email dkenny@swell.actrix.gen.nz
  584.  
  585. SOOPS                                   Software Research Associates
  586. Sarphatistraat 133                      1-1-1 Hirakawo-Cho
  587. NL-1018 GC Amsterdam, The Netherlands   Chiyoda-ku Tokyo 102, Japan
  588. TEL +31 20 525 6644                     TEL +81 3 3234 8789
  589. FAX +31 20 624 6392                     FAX +81 3 3262 9719
  590. email A731CISK@HASARA11.BITNET          email sugita@sra.co.jp
  591.  
  592. Objectif Concept                        ZumaSoft
  593. Passage Cour-Robert 5                   6235 Paseo Canyon Drive
  594. CH 1700 Fribourg, Switzerland           Malibu, California 90265, USA
  595. TEL +41 37 232977                       TEL & FAX +1 310 457-6263
  596. FAX +41 37 464889                       email tstevens@netcom.com
  597.  
  598. Information and Math Science Lab Inc.   Abstraction
  599. 2-43-1, Ikebukuro, Toshima-ku           18 Faubourg de l'Hopital
  600. Tokyo 171, Japan                        2000 Neuchatel, Switzerland
  601. email fushimi@idas.imslab.co.jp         phone +41.38.25.04.93
  602. TEL +81 3 3590 5211                     fax +41.38.259.857
  603. FAX +81 3 3590 5353                     email silberstein@clients.switch.ch
  604.  
  605. Eon Software                            Feinarbeit
  606. 19 Stapleton Road                       Altenbraker Strasse 4
  607. Heddington, Oxford OX3 7LX, UK          D-12053 Berlin, Germany
  608. TEL +44 865 741452                      tel +49 30 6215827
  609. email ian@eonsw.demon.co.uk             fax +49 30 6215863
  610.                                         email langmack@netmbx.netmbx.de
  611.  
  612. Ruperez & Associates
  613. c/San Bartolome 21, 5F
  614. 20001 San Sebastian, Spain
  615. TEL +34 43 461801
  616. email jipferur@si.ehu.es
  617.  
  618. ----------
  619.  
  620. Q17)   Are there any conferences for Eiffel users?
  621.  
  622. The conferences listed here are not just for Eiffel. Eiffel shares the 
  623. spotlight with other object-oriented languages including C++ and Smalltalk.
  624.  
  625. Jun 5 - 8. 1995
  626. Object Expo, New York, NY
  627.    Bertrand Meyer is a scheduled keynote speaker;
  628.    There will be a TowerEiffel User's Group meeting.
  629.  
  630. Jul 31 - Aug 4, 1995
  631.    TOOLS USA, Santa Barbara, California
  632.    Deadline for papers: 1 Feb
  633.  
  634. Oct 16 - 20, 1995
  635. OOPSLA, Austin TX
  636.    An Eiffel BOF will be held -- contact Jim McKim <jcm@hgc.mstr.edu>.
  637.    There will be a TowerEiffel User's Group meeting featuring a
  638.       tour of Tower Technology's Corporate Headquarters.
  639.    AFOOT (Austin Forum for OO Technology) co-founded by Rock Howard and
  640.       administered by Tower, will host a special event featuring Grady
  641.       Booch.
  642.  
  643. TOOLS is the major international conference devoted to the applications of 
  644. Object-Oriented technology. Other events, such as Eiffel User Group 
  645. meetings or NICE meetings are often held in conjunction with TOOLS.
  646.  
  647. TOOLS Conferences
  648. PO Box 6863, Santa Barbara, CA 93160, USA
  649. TEL (805) 685 1006, FAX (805) 685 6869
  650. email tools@tools.com
  651.  
  652. ----------
  653.  
  654. Q18)   Why do Eiffel implementations compile to C?
  655.  
  656. (Most, but not all, current Eiffel implementations compile to C or C++.)
  657.  
  658. By using C as a target language, an Eiffel implementor can:
  659.  
  660. -  bring Eiffel to the marketplace faster and at lower cost
  661. -  port their implementation more easily to other platforms
  662. -  take advantage of optimisation provided by the C compiler
  663.  
  664. Much of the technology that makes Eiffel relatively simple to use also 
  665. makes it more difficult to implement (an Eiffel-to-C compiler is perhaps 4 
  666. to 5 times more difficult to create than a native Pascal compiler).
  667.  
  668. Compiling Eiffel to C seems to work well under Unix. C is sometimes thought 
  669. of as the native code of Unix.
  670.  
  671. On the other hand, C is not universal on other platforms, and the Eiffel 
  672. purchaser may need to buy a C compiler as well, and possibly replace it if 
  673. the supported C compilers change with new versions of the Eiffel compiler.
  674.  
  675. With a native-code compiler, you'd get somewhat better throughput and the 
  676. potential for smaller executables and slightly better performance. You'd 
  677. also get a higher price and an even longer wait for Eiffel to show up on 
  678. other than the leading market share machines.
  679.  
  680. ----------
  681.  
  682. Q19)   What is BON?
  683.  
  684. BON ("Business Object Notation") is a method for high-level analysis and 
  685. design, offering a seamless reversible transition to an Eiffel 
  686. implementation. The method emphasizes Design by Contract and systematic 
  687. development.
  688.  
  689. ----------
  690.  
  691. Q20)   Where can I get an Eiffel editor or emacs-mode?
  692.  
  693. Franck Arnaud's Eiffel extension to the Windows/WindowsNT programmers 
  694. editor Codewright from Premia allows you to see Eiffel code in colour, has 
  695. smart indenting and a few templates. Available by anonymous FTP from
  696. ftp://ftp.cm.cf.ac.uk/pub/eiffel/tools/cweiffel.zip
  697.  
  698. The WINEDIT shareware programmer's editor offers colour syntax 
  699. highlighting, works with Eiffel/S under MS-Windows, and is available from:
  700. ftp://src.doc.ic.ac.uk/computing/systems/ibmpc/windows3/programr/we-30d.zip
  701. and ftp://gatekeeper.dec.com/.f/micro/msdos/win3/programr/we-30d.zip
  702.  
  703. Alan Philips' free Programmers File Editor also works with Eiffel/S under 
  704. MS-Windows, has templates but not syntax highlighting, available from 
  705. ftp://ftp.demon.co.uk/pub/ibmpc/windows/editors/pfe0507.zip
  706.  
  707. Tower Technology Corporation supplies an Eiffel 3 emacs mode that supports 
  708. syntax-directed highlighting, auto-indentation and is easily customized for 
  709. font use, color and indentation amounts. It comes as part of the 
  710. TowerEiffel system, but is also available free for anyone who requests it. 
  711. Send email to elisp@atlanta.twr.com to get the latest version.
  712.  
  713. ----------
  714.  
  715. Q21)   Where can I find Eiffel on the World-Wide-Web?
  716.  
  717. An Eiffel home page is held on the University of Wales College of Cardiff's 
  718. server at http://www.cm.cf.ac.uk/CLE/. This server also hosts Tower's home 
  719. page at http://www.cm.cf.ac.uk/Tower/.
  720.  
  721. The ISE WWW server holds information about Eiffel and ISE's products, at 
  722. http://www.eiffel.com/ or http://outback.eiffel.com/.
  723.  
  724. ----------
  725.  
  726. L01)   What features does Eiffel have?
  727.  
  728. Eiffel is a pure object-oriented language. Its modularity is based on 
  729. classes. It stresses reliability, and facilitates design by contract. It 
  730. brings design and programming closer together. It encourages the re-use of 
  731. software components.
  732.  
  733. Eiffel offers classes, multiple inheritance, polymorphism, static typing 
  734. and dynamic binding, genericity (constrained and unconstrained), a 
  735. disciplined exception mechanism, systematic use of assertions to promote 
  736. programming by contract, and deferred classes for high-level design and 
  737. analysis.
  738.  
  739. Eiffel has an elegant design and programming style, and is easy to learn.
  740.  
  741. ----------
  742.  
  743. L02)   What changes have been made to the Eiffel language definition?
  744.  
  745. Eiffel is still a relatively new language, and there have been a number of 
  746. changes to its definition. Here is a summary of the major changes:
  747.  
  748. 1. Changes between the publication of "Object-Oriented Software 
  749.    Construction" in 1988, and the release of Eiffel 2.3:
  750.  
  751.    - Constrained genericity enables a generic class to restrict its
  752.      generic parameters to the descendants of a given class
  753.  
  754.    - The indexing clause allows information about a class to be
  755.      recorded for extraction by archival, browsing and query tools
  756.  
  757.    - The assignment attempt operator "?=" provides a way to make
  758.      type-safe assignments going against the inheritance hierarchy
  759.  
  760.    - User-defined infix and prefix operator features
  761.  
  762.    - Expanded types support composite objects without dynamic
  763.      allocation, and with value semantics
  764.  
  765.    - The obsolete clause for smooth library evolution
  766.  
  767.    - The unique keyword for implicitly-assigned integer codes
  768.  
  769.    - The multi-branch instruction (similar to a case statement)
  770.  
  771.    - The boolean operator for implication ("implies")
  772.  
  773. 2. Changes with the introduction of Eiffel Version 3:
  774.  
  775.    - The feature adaptation subclause must now be terminated with "end"
  776.  
  777.    - Semicolons as instruction separators are optional
  778.  
  779.    - Groups of features are bracketed by a feature clause. All features
  780.      are exported unless the feature clause specifies a restriction.
  781.      The repeat subclause is no longer needed, because inherited
  782.      features keep the original export status they had in the parent
  783.      unless they are redefined, or are the subject of an export
  784.      subclause in the feature adaptation clause.
  785.  
  786.    - Preconditions can only be replaced by weaker ones, postconditions
  787.      can only be replaced by stronger ones. This is now enforced by the
  788.      language through the use of "require else" in preconditions and
  789.      "ensure then" in postconditions.
  790.  
  791.    - Ambiguities in repeated inheritance are resolved by a select
  792.      clause.
  793.  
  794.    - A feature can no longer be replicated and redefined in the same
  795.      feature adaptation clause, however the same effect can be achieved
  796.      through repeated inheritance
  797.  
  798.    - Two or more features may be defined at the same time (e.g. "f1, f2
  799.      is...").
  800.  
  801.    - The keyword "frozen" before a feature name prohibits redefinition
  802.      of the feature in descendants
  803.  
  804.    - In an anchored declaration, the anchor may now also be a formal
  805.      argument of the enclosing routine
  806.  
  807.    - A class may have zero, one or more creation procedures, designated
  808.      with the "creation" keyword. A new creation syntax using the "!!"
  809.      symbol allows the appropriate creation procedure to be specified.
  810.      It is also possible to directly create an object of any type which
  811.      conforms to the entity to which it is being attached.
  812.  
  813.    - The meaning of dot notation has been made more uniform, and
  814.      alternative constructs have been provided for the special
  815.      language-defined features that previously used dot notation:
  816.          x.Create   is now  !! x
  817.          y.Clone(x) is now  y := clone(x)
  818.          x.Forget   is now  x := Void
  819.          x.Void     is now  x = Void
  820.          x.Equal(y) is now  equal(x, y)
  821.  
  822.    - Manifest arrays can be specified, for example
  823.          <<"Jan", "Feb", "Mar">>
  824.      which also provides a way to pass a variable number of arguments
  825.      to a routine.
  826.  
  827.    - The command-line parameters are made available to the creation
  828.      procedure of the root class as an array of strings.
  829.  
  830.    - A default rescue procedure called default_rescue may be defined
  831.      and inherited.
  832.  
  833.    - A class may be declared to be an expanded class, in which case any
  834.      type based on that class will be expanded.
  835.  
  836.    - An object may no longer contain a reference to an expanded object
  837.      that is a sub-object of another object. Instead, upon assignment
  838.      of an expanded object to a non-expanded object, the expanded
  839.      object will be cloned, and a reference to the newly-cloned object
  840.      will be stored in the non-expanded object.
  841.  
  842.    - The operator "div" has been replaced by "//", and the operator
  843.      "mod" has been replaced by "\\".
  844.  
  845. 3. Changes between first and second printings of "Eiffel: The Language"
  846.  
  847.    - New basic types INTEGER_REF, REAL_REF, CHARACTER_REF and
  848.      BOOLEAN_REF etc have been introduced to provide non-expanded basic
  849.      types.
  850.  
  851.    - Introduction of the POINTER type to enable external references to
  852.      be passed around in Eiffel programs.
  853.  
  854.    - Calls from Eiffel to external routines no longer implicitly pass
  855.      the current object as the first parameter.
  856.  
  857.    There are many other (more minor) changes, which Neil Wilson has
  858.    summarized in ftp.cm.cf.ac.uk:/pub/eiffel/Docs in both Microsoft Rich
  859.    Text Format and ASCII.
  860.  
  861. ----------
  862.  
  863. L03)   What libraries come with Eiffel?
  864.  
  865. ISE Eiffel 3:
  866.  
  867. EiffelBase (the basic library) is a library of reusable components covering 
  868. data structures and algorithms. It is the result of long-going systematic 
  869. effort at classifying the fundamental patterns and structures of computer 
  870. science in a Linnaean manner. It relies heavily on the Eiffel method, in 
  871. particular assertions (preconditions, postconditions, class invariants), 
  872. Design by Contract, constrained genericity, and repeated inheritance.
  873.  
  874. EiffelVision (the GUI library) is an encapsulation of essential graphical 
  875. abstractions. It makes it possible to build graphical Eiffel applications 
  876. without having to learn and use the internal details of X, Motif, OpenLook 
  877. or other window systems, as they are all encapsulated in EiffelVision's 
  878. classes in a form that is closer to application-related concepts.
  879.  
  880. EiffelLex provides a set of lexical analysis facilities.
  881.  
  882. EiffelParse (still in a somewhat provisional state) is an object-oriented 
  883. approach to parsing.
  884.  
  885. EiffelNet is a client-server application development communication system 
  886. library for ISE Eiffel 3.
  887.  
  888. Other libraries are under development; in particular, third-party
  889. products are being integrated into the EiffelShelf distribution.
  890. (If you are interested in submitting components to the EiffelShelf,
  891. for profit or just for fame, please contact shelf@eiffel.com).
  892.  
  893. SIG Eiffel/S:
  894.  
  895.    The universal classes -- GENERAL, PLATFORM, ANY and NONE
  896.  
  897.    The special classes, some of which are treated specially by the compiler 
  898.    -- PART_COMPARABLE, COMPARABLE, NUMERIC, HASHABLE, BOOLEAN, CHARACTER, 
  899.    INTEGER, REAL, DOUBLE, ARRAY, BITS n, OBJECT_STRUCTURE and STRING
  900.  
  901.    ENVIRONMENT -- provides access to command line arguments and environment 
  902.    variables
  903.  
  904.    BASIC_IO -- access to standard input, standard output and error output 
  905.    serial I/O
  906.  
  907.    FORMAT -- conversion of other data types to and from strings
  908.  
  909.    EXCEPTION -- fine grained access to exception handling
  910.  
  911.    SYSTEM_TIME -- system time interface
  912.  
  913.    INTERNAL -- control of the garbage collector
  914.  
  915.    The FILES cluster: FILE, FILE_SYSTEM, FSYS_DAT -- files are modelled as 
  916.    persistent dynamic arrays
  917.  
  918.    TEXTFILE -- treats an ASCII text file as an array of strings
  919.  
  920.    The SORTER class -- a sorting 'expert' that knows how to sort arrays 
  921.    optimally
  922.  
  923.    The MATH class -- trig, log, truncation, and a few constants
  924.  
  925.    The basic container classes -- classified according to uniqueness (can 
  926.    the same object occur more than once in the container?), ordering (are 
  927.    objects in the container kept in sorted order?) and search access (does 
  928.    one search for a key, or for the object itself?), as well as by 
  929.    efficiency (is speed or size more important?): LIST, SORTED_LIST, 
  930.    SIMPLE_TABLE, HASH_TABLE, SORTED_TABLE, SHORT_LIST, SHORT_TABLE, 
  931.    SHORT_SORTED_LIST and SHORT_SORTED_TABLE
  932.  
  933.    Other container classes -- associative arrays accessed by a hashable 
  934.    key: DICTIONARY (with unique keys) and CATALOG (with multiple items per 
  935.    key)
  936.  
  937.    Specialised container classes -- STACK, QUEUE, PRIORITY_QUEUE and 
  938.    KEY_PRIORITY_QUEUE
  939.  
  940.    Abstract container classes -- define much of the interface of 
  941.    containers: COLLECTION, TABLE, SORTED_COLLECTION and SORT_TABLE.
  942.  
  943.    Iterator classes -- objects stored within containers can be visited 
  944.    sequentially with iterators. More than one iterator can be active on a 
  945.    container at one time: TRAVERSABLE, TWOWAY_TRAVERSABLE, ITERATOR and 
  946.    TWOWAY_ITER.
  947.  
  948.    The GRAPH Cluster -- a graph is defined by the classes VERTEX and EDGE. 
  949.    It may have weighted edges (WT_GRAPH) or unweighted edges (GRAPH). 
  950.    Iterators are provided to visit the edges emanating from a vertex 
  951.    (EDGE_ITER); or all the vertices of a graph in breadth-first order 
  952.    (BREADTH_ITER), depth-first order (DEPTH_ITER) or topological order 
  953.    (TOP_ITER).
  954.  
  955.    The MATCHER Cluster -- the MATCHER class is a pattern matcher that can 
  956.    build and activate an automaton to search for patterns in text. 
  957.    Effective descendants search for text using the Rabin-Karp algorithm 
  958.    (RK_MATCHER), the Knuth-Morris-Pratt algorithm (KMP_MATCHER) and the 
  959.    Boyer-Moore algorithm (BM_MATCHER). Others search for Regular 
  960.    Expressions (RE_MATCHER) and lists of keywords (KEYWORD_MATCHER). 
  961.    TXT_MATCHER is an iterator that searches for multiple occurrences of a 
  962.    pattern in an array of strings, using any of the matcher classes.
  963.  
  964.    The documentation is brief but readable, including examples and hints 
  965.    for adding new containers or matchers. All in all, a smaller but 
  966.    possibly tighter set of libraries.
  967.  
  968. (This response may give the appearance that Eiffel/S libraries are much
  969. more extensive than ISE's, but the converse is true.)
  970.  
  971. TowerEiffel comes with a complete set of kernel and support libraries. A 
  972. subset of the Eiffel Booch Components (described below) are also included. 
  973. A Serialization library that supports simple persistence and/or 
  974. heterogenous distribution of any Eiffel instance -- no matter how deeply 
  975. nested or self-referential -- is included.
  976.  
  977. TowerEiffel for NEXTSTEP includes a free set of components and examples for 
  978. interfacing TowerEiffel directly with Appkit and the Interface Builder 
  979. using Tower's unique interface with Objective C.
  980.  
  981. The Eiffel Booch Components are available seperately. The Eiffel Booch 
  982. Components are efficient and orthoginal data structure classes that come 
  983. complete with test drivers. Included are AVL_TREE, BAG, BINARY_TREE, DEQUE, 
  984. DICTIONARY, DIRECTED_GRAPH, HASH_TABLE, LIST, MAP,  MULTIWAY_TREE, QUEUE, 
  985. RING, SET, STACK and UNDIRECTED_GRAPH. Most Booch Components are available 
  986. in a variety of forms offering trade-offs in speed and memory utilization. 
  987. Also included are dozens of classes for pattern matching, sorting, 
  988. searching, and iteration, as well as nodes, pairs and other support 
  989. classes.
  990.  
  991. Tower also sells the TowerEiffel Motif Components. These components work 
  992. stand-alone as well as in conjunction with an interface to an Eiffelized 
  993. version of X-Designer -- a leading Motif GUI Builder.
  994.  
  995. Tower also sells the O2 OODBMS and the TowerEiffel/O2 Interface Components. 
  996. These libraries provide direct and seamless Eiffel persistency.
  997.  
  998. ----------
  999.  
  1000. L04)   What's the big deal about preconditions and postconditions?
  1001.  
  1002. The big deal is that it supports programming by contract. For example, 
  1003. preconditions (require clauses) are simple boolean statements that are used 
  1004. to check that the input arguments are valid and that the object is in a 
  1005. reasonable state to do the requested operation. If not, an exception is 
  1006. generated. Similarly, postconditions (ensure clauses) make sure that a 
  1007. method has successfully performed its duties, thus "fulfilling its 
  1008. contract" with the caller. Invariants are boolean expressions that are 
  1009. checked every time an object method returns back to a separate object.
  1010.  
  1011. You can use these ideas in any object-oriented programming language, but 
  1012. usually must supply your own assertion mechanisms or rely on programmer 
  1013. discipline. In Eiffel, the ideas are integrated into the whole fabric of 
  1014. the environment. We find them used by:
  1015.  
  1016. -- the exception handling mechanism.
  1017.    (Tracebacks almost always identify the correct culprit code since 
  1018.    preconditions almost always denote an error in the calling method, while 
  1019.    postconditions denote an error in the called method.)
  1020.  
  1021. -- the automatic compilation system.
  1022.    (Assertions can be disabled entirely or selectively by type on a per 
  1023.    class basis.)
  1024.  
  1025. -- the Eiffel compiler
  1026.    (Invariants, preconditions and postconditions are all inherited in a 
  1027.    manner that makes logical sense.)
  1028.    (Assertion expressions are not allowed to produce side effects so they 
  1029.    can be omitted without effect.)
  1030.  
  1031. -- the automatic documentation tools
  1032.    (Preconditions and postconditions are important statements about what a 
  1033.    method does, often effectively describing the "contract" between the 
  1034.    caller and callee. Invariants can yield information about legal states 
  1035.    an object can have.)
  1036.  
  1037. In the future we expect to see formal methods technology work its way into 
  1038. the assertion capability. This will allow progressively more powerful 
  1039. constraints to be put into place. In addition, if a conjecture by Dr. Meyer 
  1040. bears fruit, the notion of preconditions may be extended into an important 
  1041. mechanism for the development of parallel programming.
  1042.  
  1043. ----------
  1044.  
  1045. L05)   Please explain and discuss covariance vs. contravariance.
  1046.  
  1047. Consider the following situation: we have two classes PARENT and CHILD. 
  1048. CHILD inherits from PARENT, and redefines PARENT's feature 'foo'.
  1049.  
  1050.    class PARENT
  1051.       feature
  1052.          foo (arg: A) is ...
  1053.    end
  1054.  
  1055.    class CHILD
  1056.       inherit
  1057.          PARENT redefine foo end
  1058.       feature
  1059.          foo (arg: B) is ...
  1060.    end
  1061.  
  1062. The question is: what restrictions are placed on the type of argument to 
  1063. 'foo', that is 'A' and 'B'? (If they are the same, there is no problem.)
  1064.  
  1065. Here are two possibilities:
  1066.  
  1067.    (1)  B must be a child of A (the covariant rule - so named because in 
  1068.         the child class the types of arguments in redefined routines are 
  1069.         children of types in the parent's routine, so the inheritance 
  1070.         "varies" for both in the same direction)
  1071.  
  1072.    (2)  B must be a parent of A (the contravariant rule)
  1073.  
  1074. Eiffel uses the covariant rule.
  1075.  
  1076. At first, the contravariant rule seems theoretically appealing. Recall that 
  1077. polymorphism means that an attribute can hold not only objects of its 
  1078. declared type, but also of any descendant (child) type. Dynamic binding 
  1079. means that a feature call on an attribute will trigger the corresponding 
  1080. feature call for the *actual* type of the object, which may be a descendant 
  1081. of the declared type of the attribute. With contravariance, we can assign 
  1082. an object of descendant type to an attribute, and all feature calls will 
  1083. still work because the descendant can cope with feature arguments at least 
  1084. as general as those of the ancestor. In fact, the descendant object is in 
  1085. every way also a fully-valid instance of the ancestor object: we are using 
  1086. inheritance to implement subtyping.
  1087.  
  1088. However, in programming real-world applications we frequently need to 
  1089. specialize related classes jointly.
  1090.  
  1091. Here is an example, where PLOT_3D inherits from PLOT, and DATA_SAMPLE_3D 
  1092. inherits from DATA_SAMPLE.
  1093.  
  1094.    class PLOT
  1095.       feature
  1096.          add(arg: DATA_SAMPLE) is ...
  1097.  
  1098.    class PLOT_3D
  1099.       inherit
  1100.          PLOT redefine add end
  1101.       feature
  1102.          add(arg: DATA_SAMPLE_3D) is ...
  1103.  
  1104. This requires the covariant rule, and works well in Eiffel.
  1105.  
  1106. It would fail if we were to put a PLOT_3D object into a PLOT attribute and 
  1107. try to add a DATA_SAMPLE to it. It fails because we have used inheritance 
  1108. to implement code re-use rather than subtyping, but have called a feature 
  1109. of the ancestor class on an object of the descendant class as if the 
  1110. descendant object were a true subtype. It is the compiler's job to detect 
  1111. and reject this error, to avoid the possibility of a run-time type error.
  1112.  
  1113. Here's another example where a real-world situation suggests a covariant 
  1114. solution. Herbivores eat plants. Cows are herbivores. Grass is a plant. 
  1115. Cows eat grass but not other plants.
  1116.  
  1117.    class HERBIVORE                               class PLANT
  1118.    feature
  1119.       eat(food: PLANT) is ...
  1120.       diet: LIST[PLANT]
  1121.  
  1122.    class COW                                     class GRASS
  1123.    inherit                                       inherit
  1124.       HERBIVORE                                     PLANT
  1125.          redefine eat
  1126.       end
  1127.    feature eat(food: GRASS) is ...
  1128.  
  1129. This does what we want. The compiler must stop us from putting a COW object 
  1130. into a HERBIVORE attribute and trying to feed it a PLANT, but we shouldn't 
  1131. be trying to do this anyway.
  1132.  
  1133. Also consider the container 'diet'. We are not forced to redefine this 
  1134. feature in descendant classes, because with covariant redefinition of the 
  1135. argument to 'eat', the feature 'diet' can always contain any object that 
  1136. can be eaten (e.g. grass for a cow). (With contravariant redefinition of 
  1137. the argument to 'eat', it would be necessary to re-open the parent class to 
  1138. make the type of the container 'diet' more general).
  1139.  
  1140. To summarise: Real-world problems often lend themselves to covariant 
  1141. solutions. Eiffel handles these well. Incorrect programs in the presence of 
  1142. covariant argument redefinition can cause run-time type errors unless the 
  1143. compiler catches these.
  1144.  
  1145. Sather uses the contravariant rule, but uses separate mechanisms for 
  1146. subtyping and code reuse and only allows dynamic binding on true subtypes. 
  1147. This seems to make contravariance work well, but it can force the Sather 
  1148. programmer to use concrete types when modelling covariant problems. 
  1149. Concrete types cannot be further subtyped in Sather, so this can reduce the 
  1150. potential for re-use (in Eiffel, any type can be further subtyped, but the 
  1151. compiler must check that it is used validly).
  1152.  
  1153. ----------
  1154.  
  1155. L06)   Is it true that there are "holes" in the Eiffel type system?
  1156.  
  1157. No. The design of Eiffel makes it possible to catch all type errors at 
  1158. compile time, so that an Eiffel program cannot abort with a run time type 
  1159. error.
  1160.  
  1161. However, to catch the more obscure type errors at compile time, the 
  1162. compiler must analyse the way that classes interact within the entire 
  1163. system, rather than just looking at each class one by one. This type of 
  1164. system-wide checking is also necessary for many compiler optimisations.
  1165.  
  1166. Because system-wide compile-time validity checking can be complex, some 
  1167. compilers insert run-time traps for these errors instead, and some may fail 
  1168. to correctly trap these errors. Ask your Eiffel compiler vendor how they 
  1169. handle these type problems.
  1170.  
  1171. ----------
  1172.  
  1173. L07)   Is there support for concurrency in Eiffel?
  1174.  
  1175. Eiffel 3 does not support concurrency; neither do current commercial 
  1176. compilers. However, work on concurrency is one of the hottest Eiffel-
  1177. related research topics.
  1178.  
  1179. For four articles on concurrency facilities for Eiffel, including Bertrand 
  1180. Meyer's article "Systematic Concurrent Object-Oriented Programming", see 
  1181. the September 1993 "Communications of the ACM" (Vol. 36, Number 9).
  1182.  
  1183. ----------
  1184.  
  1185. L08)   Why doesn't Eiffel allow function overloading?
  1186.  
  1187. In Eiffel, no two features of a class may have the same identifier, 
  1188. regardless of their respective signatures.  The prevents the use of 
  1189. function overloading ("multiple polymorphism"), a common programming 
  1190. technique in languages like C++.
  1191.  
  1192. Eiffel is designed to be minimal: it includes exactly the features that its 
  1193. designer considered necessary, and nothing else.
  1194.  
  1195. Because Eiffel already supports (single) polymorphism through its 
  1196. inheritance system, the only positive thing that function overloading buys 
  1197. you is reducing the number of feature names you have to learn. This is at 
  1198. the expense of reducing the ability of the compiler to trap mistakes (often 
  1199. type errors).
  1200.  
  1201. Readability is also enhanced when overloading is not possible. With 
  1202. overloading you would need to consider the type of the arguments as well as 
  1203. the type of the target before you can work out which feature is called. 
  1204. With multiple inheritance and dynamic binding this is awkward for a 
  1205. compiler and error-prone for a human. There is no intuitive rule which 
  1206. could be used to disambiguate routine calls where there is no "nearest" 
  1207. routine.
  1208.  
  1209. However, in Eiffel it's easy to write one routine with arguments of the 
  1210. most general applicable type, then use the assignment attempt operator to 
  1211. carry out the appropriate operation according to the run-time type of the 
  1212. arguments (thereby explicitly programming the disambiguation "rules").
  1213.  
  1214. Having said that, the lack of multiple polymorphism does force us to write 
  1215. some common mathematical operations (e.g. matrix math) in an awkward way, 
  1216. and forces arithmetic expressions to be treated specially (the "arithmetic 
  1217. balancing rule", ETL p385). But no-one has come up with a solution which is 
  1218. so simple, elegant and useful that it improves the quality of Eiffel as a 
  1219. whole.
  1220.  
  1221. ----------
  1222.  
  1223. L09)   Why are there no procedural types in Eiffel?
  1224.  
  1225. The notion of allowing a routine to be passed as an argument to a routine 
  1226. is in many people's view incompatible with the O-O method. The definition 
  1227. of object-orientation implies that every operation belongs to an object 
  1228. type, so one does not manipulate routines just by themselves.
  1229.  
  1230. A possible technique when one feels the need to use a routine argument is 
  1231. to write a class and include the routine in it. Then (rather than passing a 
  1232. routine argument) pass an object - an instance of this class - to which the 
  1233. routine can then be applied. This is a more flexible approach in the long 
  1234. term. For example, you may later add an "undo" routine to your routine-
  1235. containing class, or an attribute such as "time of last execution".
  1236.  
  1237. ----------
  1238.  
  1239. L10)   Why are there no class attributes in Eiffel?
  1240.  
  1241. In Eiffel, the "once" function provides greater functionality in a more 
  1242. disciplined way. The body of a "once" function is executed once only, when 
  1243. it is first called. Thereafter, the "once" function returns the same Result 
  1244. without re-executing its body.
  1245.  
  1246. The "once" function can therefore be used to implement a shared constant 
  1247. object (computed on its first use), or a shared attribute of reference type 
  1248. (initialized on its first use).
  1249.  
  1250. A "once" function can be included in a mixin class. The shared attribute 
  1251. returned by that once function is then available to all instances of those 
  1252. classes which inherit from the mixin class.
  1253.  
  1254. ----------
  1255.  
  1256. L11)   How can I call the parent-class version of a redefined routine?
  1257.  
  1258. When an inherited routine is redefined in a child class, is there a way for 
  1259. the redefined routine to call the version in the parent class?
  1260.  
  1261. 1) If you are responsible for the design of the parent class, you may
  1262.    anticipate such a need. You may provide multiple versions of the same
  1263.    routine body, with some versions frozen (not redefinable):
  1264.  
  1265.    class PARENT
  1266.    feature foo, frozen parent_foo is
  1267.       do
  1268.          ...
  1269.       end
  1270.    end
  1271.  
  1272.    class CHILD
  1273.    inherit
  1274.       PARENT
  1275.          redefine foo
  1276.       end
  1277.    feature foo is
  1278.       do
  1279.          parent_foo
  1280.          ...
  1281.       end
  1282.    end
  1283.  
  1284. 2) Otherwise, you use repeated inheritance to get two versions of 'foo',
  1285.    and redefine one of them:
  1286.  
  1287.    class PARENT
  1288.    feature foo is
  1289.       do
  1290.          ...
  1291.       end
  1292.    end
  1293.  
  1294.    class CHILD
  1295.    inherit
  1296.       PARENT
  1297.          rename foo as parent_foo
  1298.       end
  1299.       PARENT
  1300.          redefine foo
  1301.          select foo  -- (in case of dynamic binding)
  1302.       end
  1303.    feature
  1304.       foo is
  1305.          do
  1306.             parent_foo
  1307.             ...
  1308.          end
  1309.    end
  1310.  
  1311. ----------
  1312.  
  1313. L12)   Where can I find a comparison between Eiffel and C++?
  1314.  
  1315. In Richard Wiener's book "Software Development Using Eiffel: There can be 
  1316. life after C++" (Prentice-Hall, ISBN 0-13-100686-X).
  1317.  
  1318. ----------
  1319.  
  1320. L13)   Are there any destructors in Eiffel? What about object
  1321.        finalization?
  1322.  
  1323. Eiffel objects are garbage-collected, so that there is no need for
  1324. the software developer to worry about whether, how and when to "destruct" 
  1325. or "free" them in the software text.
  1326.  
  1327. Some implementations offer a "free" procedure for programmers who 
  1328. absolutely want to remove an object manually. Such a procedure is "use at 
  1329. your own risk" and is not needed in normal Eiffel development.
  1330.  
  1331. Coming back to normal usage, the need may arise to ensure that certain 
  1332. operations will automatically take place whenever the garbage collector 
  1333. reclaims an object. For example if an Eiffel object describing a file 
  1334. becomes unreachable and hence is eventually garbage-collected, you may 
  1335. want to ensure that the physical file will be closed at that time. Some 
  1336. implementations of Eiffel provide a mechanism for that purpose: procedure 
  1337. 'dispose' from the Kernel Library class MEMORY.
  1338.  
  1339. Whenever the garbage collector collects an object, it calls 'dispose' on 
  1340. that object. The procedure does nothing by default (so that a smart GC will 
  1341. of course avoid executing any actual call). But any class may inherit from 
  1342. MEMORY and redefine 'dispose' to perform appropriate actions, such as 
  1343. closing a file. Such actions are sometimes called "finalization". This 
  1344. technique achieves it conveniently.
  1345.  
  1346. Because there is no guarantee as to the order in which the garbage 
  1347. collector will reclaim objects that have become unreachable, safe 
  1348. redefinitions of 'dispose' should only act on external resources such as 
  1349. file descriptors, database elements, window system resources etc, not on 
  1350. Eiffel object structures themselves.
  1351.  
  1352. -- 
  1353. -- Roger Browne, 6 Bambers Walk, Wesham, PR4 3DG, UK   | Ph 01772-687525
  1354. -- Everything Eiffel: compilers/libraries/publications | +44-1772-687525
  1355.